'use strict'

const path = require('path')

function resolve(dir){
    return path.join(__dirname,dir)
}

//配置方案：https://cli.vuejs.org/zh/config/#vue-config-js
module.exports = {
    publicPath: process.env.NODE_ENV ==='production'?'./production/':'./',
    outputDir:'dist',
    assetsDir:'static',
    indexPath:'index.html',
    filenameHashing:true,
    lintOnSave:process.env.NODE_ENV !== 'production',
    productionSourceMap: false,
    devServer:{
        port:8080,
        open:true,
        overlay:{
            warnings:false,
            errors:true
        },
        proxy:{
            // 把key的路径代理到target位置
            [process.env.VUE_APP_BASE_API]:{
                target:`http://127.0.0.1:9999`,
                changeOrigin:true,
                pathRewrite:{
                    ['^' + process.env.VUE_APP_BASE_API]: '' // 举例 '^/api:""' 把路径中的/api字符串删除
                }
            }
        }
    },
    configureWebpack:{
        //路径走src文件夹
        resolve:{
            alias:{
                '@':resolve('src')
            }
        }
    },
    chainWebpack(config){
        // set preserveWhitespace
        config.module
        .rule('vue')
        .use('vue-loader')
        .loader('vue-loader')
        .tap(options => {
            options.compilerOptions.preserveWhitespace = true
            return options
        })
        .end()

        config
        .when(process.env.NODE_ENV === 'development',config => config.devtool('cheap-source-map'))

        config
        .when(process.env.NODE_ENV !== 'development',
            config => {
                config
                    .plugin('ScriptExtHtmlWebpackPlugin')
                    .after('html')
                    .use('script-ext-html-webpack-plugin', [{
                        // `runtime` must same as runtimeChunk name. default is `runtime`
                        inline: /single\..*\.js$/
                    }])
                    .end()
                config
                    .optimization.splitChunks({
                        chunks: 'all',
                        cacheGroups: {
                            libs: {
                                name: 'chunk-libs',
                                test: /[\\/]node_modules[\\/]/,
                                priority: 10,
                                chunks: 'initial' // only package third parties that are initially dependent
                            },
                            elementUI: {
                                name: 'chunk-elementUI', // split elementUI into a single package
                                priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
                                test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
                            },
                            commons: {
                                name: 'chunk-commons',
                                test: resolve('src/components'), // can customize your rules
                                minChunks: 3, //  minimum common number
                                priority: 5,
                                reuseExistingChunk: true
                            }
                        }
                    })
                config.optimization.runtimeChunk('single')
            }
        )
    }
}